#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#define APP_BUFFER_SIZE 1024

#include "pthread.h"

typedef struct {
    char *data_ptr; /* 子缓冲区的指针 */
    int data_len; /* 数据长度 */
    int total_len; /* 总长度 */
} app_buffer_sub_t;

typedef struct {
    app_buffer_sub_t *sub_buffers[2];
    int read_index; /* 负责读的子缓冲区索引 */
    int write_index;/* 负责写的子缓冲区索引 */
    pthread_mutex_t read_lock; /* 读锁 */
    pthread_mutex_t swap_lock;
} app_buffer_t;

/**
 * @brief : 初始化缓冲区
 * @return app_buffer_t* 
 */
app_buffer_t *app_buffer_init(void);

/**
 * @brief : 向缓冲区写数据
 * @param    buffer: 结构体指针
 * @param    write_data: 写入的数据
 * @param    write_data_len: 写入的数据的长度
 * @return int 写成功返回0，失败返回-1
 */
int app_buffer_write(app_buffer_t *buffer, char *write_data, int write_data_len);

/**
 * @brief : 从缓冲区读取数据
 * @param    buffer: 数据的结构体指针
 * @param    read_data: 读取的数据
 * @param    read_data_len: 读取的数据长度
 * @return int 读取成功返回 数据实际大小，失败返回-1
 */
int app_buffer_read(app_buffer_t *buffer, char *read_data, int read_data_len);

/**
 * @brief : 销毁缓冲区
 * @param    buffer: 换成取的结构体指针
 */
void app_buffer_destroy(app_buffer_t *buffer);
#endif /* __APP_BUFFER_H__ */
